package hlPay

import (
	"encoding/json"
)

// HlPayRequest hlPay平台基础请求
type HlPayRequest struct {
	MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
	Amount          float64 `json:"amount"`          // 金额
	Currency        string  `json:"currency"`        // 货币类型
	Subject         string  `json:"subject"`         // 订单标题
	Body            string  `json:"body,omitempty"`  // 订单描述
}

// ToJSON 转换为JSON字符串
func (r *HlPayRequest) ToJSON() string {
	data, _ := json.Marshal(r)
	return string(data)
}

// HlPayResponse hlPay平台基础响应
type HlPayResponse struct {
	Code int    `json:"code"` // 响应码
	Msg  string `json:"msg"`  // 响应消息
	Data struct {
		OrderNo         string  `json:"orderNo"`         // 平台订单号
		MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
		Amount          float64 `json:"amount"`          // 金额
		Currency        string  `json:"currency"`        // 货币类型
		Status          string  `json:"status"`          // 状态
		PayURL          string  `json:"payUrl"`          // 支付链接
	} `json:"data"`
}

// HlPayRefundRequest hlPay平台退款请求
type HlPayRefundRequest struct {
	MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
	OrderNo         string  `json:"orderNo"`         // 平台订单号
	RefundAmount    float64 `json:"refundAmount"`    // 退款金额
	Reason          string  `json:"reason"`          // 退款原因
}

// ToJSON 转换为JSON字符串
func (r *HlPayRefundRequest) ToJSON() string {
	data, _ := json.Marshal(r)
	return string(data)
}

// HlPayRefundResponse hlPay平台退款响应
type HlPayRefundResponse struct {
	Code int    `json:"code"` // 响应码
	Msg  string `json:"msg"`  // 响应消息
	Data struct {
		RefundNo        string  `json:"refundNo"`        // 退款单号
		MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
		OrderNo         string  `json:"orderNo"`         // 平台订单号
		RefundAmount    float64 `json:"refundAmount"`    // 退款金额
		Status          string  `json:"status"`          // 状态
	} `json:"data"`
}

// HlPayQueryRequest hlPay平台查询请求
type HlPayQueryRequest struct {
	MerchantOrderNo string `json:"merchantOrderNo,omitempty"` // 商户订单号
	OrderNo         string `json:"orderNo,omitempty"`         // 平台订单号
}

// ToJSON 转换为JSON字符串
func (r *HlPayQueryRequest) ToJSON() string {
	data, _ := json.Marshal(r)
	return string(data)
}

// HlPayQueryResponse hlPay平台查询响应
type HlPayQueryResponse struct {
	Code int    `json:"code"` // 响应码
	Msg  string `json:"msg"`  // 响应消息
	Data struct {
		OrderNo         string  `json:"orderNo"`         // 平台订单号
		MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
		Amount          float64 `json:"amount"`          // 金额
		Currency        string  `json:"currency"`        // 货币类型
		Status          string  `json:"status"`          // 状态
		PayTime         string  `json:"payTime"`         // 支付时间
	} `json:"data"`
}

// HlPayNotify hlPay平台回调通知
type HlPayNotify struct {
	OrderNo         string  `json:"orderNo"`         // 平台订单号
	MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
	Amount          float64 `json:"amount"`          // 金额
	Currency        string  `json:"currency"`        // 货币类型
	Status          string  `json:"status"`          // 状态
	PayTime         string  `json:"payTime"`         // 支付时间
	Sign            string  `json:"sign"`            // 签名
}

// TokenRequest hlPay获取token请求
type TokenRequest struct {
	GrantType    string `json:"grantType"`    // 授权类型
	ClientID     string `json:"clientId"`     // 客户端ID
	ClientSecret string `json:"clientSecret"` // 客户端密钥
	ClientKey    string `json:"clientKey"`    // 客户端密钥
}

// TokenResponse hlPay获取token响应
type TokenResponse struct {
	Code int    `json:"code"` // 响应码
	Msg  string `json:"msg"`  // 响应消息
	Data struct {
		Scope           interface{} `json:"scope"`             // 作用域
		OpenID          interface{} `json:"openid"`            // 开放ID
		MerchantStatus  string      `json:"merchantStatus"`    // 商户状态
		MerchantName    string      `json:"merchantName"`      // 商户名称
		AccessToken     string      `json:"access_token"`      // 访问令牌
		RefreshToken    interface{} `json:"refresh_token"`     // 刷新令牌
		ExpireIn        int64       `json:"expire_in"`         // 过期时间（秒）
		RefreshExpireIn interface{} `json:"refresh_expire_in"` // 刷新令牌过期时间
		ClientID        string      `json:"client_id"`         // 客户端ID
	} `json:"data"`
}
